package org.example.software.utils;

import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;

public class JwtUtil {

    private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
    private static final long EXPIRATION_TIME = 3600_000; // 1 小时

    // 生成 Token
    public static String generateToken(String userId, boolean isAdmin) {
        return Jwts.builder()
                .setSubject(userId)
                .claim("role", isAdmin ? "admin" : "user") // 添加角色 claim
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                .signWith(SECRET_KEY)
                .compact();
    }

    // 解析 Token 获取用户 ID
    public static String getUserIdFromToken(String token) {
        try {
            Claims claims = Jwts.parserBuilder()
                    .setSigningKey(SECRET_KEY)
                    .build()
                    .parseClaimsJws(token)
                    .getBody();
            return claims.getSubject();
        } catch (JwtException e) {
            return null; // Token 无效或过期
        }
    }

    // 获取角色（user 或 admin）
    public static String getRoleFromToken(String token) {
        try {
            Claims claims = Jwts.parserBuilder()
                    .setSigningKey(SECRET_KEY)
                    .build()
                    .parseClaimsJws(token)
                    .getBody();
            return claims.get("role", String.class); // 获取角色
        } catch (JwtException e) {
            return null; // Token 无效或过期
        }
    }

    // 判断是否是管理员
    public static boolean isAdmin(String token) {
        String role = getRoleFromToken(token);
        return "admin".equals(role); // 判断角色是否为管理员
    }

}
